package sort;

import java.util.*;

/**
 * @Author Zhang Chao
 * @Date 2021/5/20 21:03
 * @Version 1.0
 * https://www.cnblogs.com/mengzj233/p/9816289.html
 * Comparator接口
 */
public class TestComparator implements Comparator<User> {

    public static void main(String[] args) {
        List< User > users = new ArrayList< User >();
        users.add( new User( 10, "a" ) );
        users.add( new User( 11, "d" ) );
        users.add( new User( 15, "s" ) );
        users.add( new User( 6, "x" ) );
        users.add( new User( 17, "a" ) );
        users.add( new User( 17, "b" ) );
        users.add( new User( 17, "c" ) );
        users.add( new User( 17, "d" ) );

        TestComparator comparator = new TestComparator();
        //users.sort(comparator);
        //也可以：
        Collections.sort(users,comparator);

        for ( User u : users ) {
            System.out.println( u );
        }
    }

    /**
     * Comparator接口可以实现自定义排序，实现Comparator接口时，要重写compare方法：
     * int compare(Object o1, Object o2) 返回一个基本类型的整型
     * 如果要按照升序排序,则o1 小于o2，返回-1（负数），相等返回0，01大于02返回1（正数）
     * 如果要按照降序排序,则o1 小于o2，返回1（正数），相等返回0，01大于02返回-1（负数）
     * 前面的大  升序
     * 后面的大  降序
     * 反着的？
     * @param user1
     * @param user2
     * @return
     */
    @Override
    public int compare(User user1, User user2) {
        if(user1.equals(user2)){
            return 0;
        }else if (user1.getAge()<user2.getAge()){
            return 1;
        }else if (user1.getAge()==user2.getAge()){
            int f = user1.getName().compareTo(user2.getName());
            if(f<0){
                return -1;
            }
            return 0;
        }else{
            return -1;
        }

    }
}

class User{
    private int age;
    private String name;

    public User(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public User() {
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
}